package route

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"mime/multipart"
	"net/http"
	"strings"
	"time"
	"zsgGin/common"
)

func PublicRoute(route *gin.RouterGroup) {
	/*
	 	*文件上传
	 */
	route.POST("/upload", func(g *gin.Context) {
		file, err := g.FormFile("file")
		if err != nil {
			common.FailWithMessage("单个文件上传失败,原因:"+err.Error(),g)
			return
		}
		var files []*multipart.FileHeader
		files=append(files,file )
		msg,err:=common.FieldUpload(files,g)
		if err!=nil{
			common.FailWithMessage("单个文件上传失败,原因:"+err.Error(), g)
			return
		}
		common.OkWithMessage(msg,g)
	})
	/*
		*多文件上传
	 */
	route.POST("/multipartUpload", func(g *gin.Context) {
		form, err := g.MultipartForm()
		if err != nil {
			common.FailWithMessage( "文件获取失败", g)
			return
		}
		files := form.File["files"]
		msg,err:=common.FieldUpload(files,g)
		if err!=nil{
			common.FailWithMessage("多文件上传失败,原因:"+err.Error(), g)
			return
		}
		common.OkWithMessage(msg,g)
	})


	/*
		*文件下载
	 */
	route.GET("download", func(g *gin.Context) {
		//获取文件名称
		fileName:=g.Query("fileName")
		if fileName==""{
			common.FailWithMessage("请传输文件名称",g)
			return
		}
		if strings.Contains(fileName,"resources/upload/") {
			sliceFileName := strings.Split(fileName, ".")
			name := fmt.Sprintf("%d.%s", time.Now().UnixNano(), sliceFileName[len(sliceFileName)-1])
			//表示是文件流,唤起浏览器下载,一般设置了这个,就要设置文件名
			g.Header("Content-Type", "application/octet-stream")
			//用来指定下载下来的文件名
			g.Header("Content-Disposition", "attachment;filename="+name)
			//表示传输过程中的编码形式,乱码问题可能就是因为它
			g.Header("Content-Transfer-Encoding", "binary")
			g.File(fileName)
			return
		}
		common.FailWithMessage("文件路径不正确",g)
	})


	/*
		*静态资源访问
	 */
	route.StaticFS("/file", http.Dir("resources/upload"))
}
